home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1993 November / JCSM Shareware Collection - 1993-11.iso / cl760 / garfforj.lzh / GRAPH.DOC < prev    next >
Text File  |  1991-04-08  |  39KB  |  1,030 lines

  1.  
  2.  
  3.  
  4.  
  5.                      Graph for Fortran v3.0
  6.  
  7.  
  8.               Graph plotting on dot matrix printers
  9.              =======================================
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18. ********************************************************************
  19.  
  20.       SHAREWARE NOTICE          Copyright (C) D.I. Hoyer, 1990/1991.
  21.      ==================
  22.  
  23.      If you find these Fortran subroutines useful, please register
  24.      by sending US$35-00 or Aus$40-00 to the address below :-
  25.  
  26.                     David I Hoyer
  27.                     P.O. Box 1743
  28.                     Macquarie Centre NSW 2113
  29.                     AUSTRALIA
  30.  
  31.      This subroutine library is a shareware product. Copies of the
  32.      original unmodified programs and manual on disk may be made 
  33.      and distributed, as long as they are not charged for. You may 
  34.      not modify the source code or manual except for your personal 
  35.      use. Registrants will receive a free update.
  36.  
  37.  
  38. *******************************************************************
  39.  
  40.      No responsibility is accepted for any errors in this software, 
  41.      or for any loss or damage resulting from using it.  
  42.  
  43. *******************************************************************
  44.                                                                Page 2
  45.  
  46.  
  47.                             C O N T E N T S
  48.                            =================
  49.  
  50.                                                                Page
  51.  
  52. 0.  Shareware notice   .  .  .  .  .  .  .  .  .  .  .  .  .  .  1
  53.  
  54. 1.  Introduction .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  3
  55.  
  56. 2.  Description of disk contents   .  .  .  .  .  .  .  .  .  .  4
  57.  
  58. 3.  Some quick demonstrations   .  .  .  .  .  .  .  .  .  .  .  5
  59.  
  60. 4.  Using GRAPH to plot graphs from a data file   .  .  .  .  .  6
  61.       a)  Plotting the demo graphs supplied .  .  .  .  .  .  .  6
  62.       b)  Plotting your own graphs    .  .  .  .  .  .  .  .  .  6
  63.       c)  Data file specifications for GRAPH.for  .  .  .  .  .  7
  64.  
  65. 5.  Using the GRAPHLIB subroutines to get your own   .  .  .  .  9
  66.       programs to plot graphs
  67.  
  68. 6.  Limitations  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  10
  69.       a)  Graph size & Memory   .  .  .  .  .  .  .  .  .  .  .  10
  70.       b)  Function parameters   .  .  .  .  .  .  .  .  .  .  .  10
  71.  
  72.  
  73.  
  74. Appendix A.  Definition of Fortran names used  .  .  .  .  .  .  11
  75.  
  76. Appendix B.  Symbols and line types.  .  .  .  .  .  .  .  .  .  14
  77.  
  78. Appendix C.  Sample list of standard user-defined functions   .  15
  79.  
  80. Appendix D.  A sample data file for use with GRAPH   .  .  .  .  18
  81.  
  82. Appendix E.  Changes from earlier versions  .  .  .  .  .  .  .  22
  83.  
  84.                                                                Page 3
  85.  
  86.                  Graph plotting on dot matrix printers
  87.                 =======================================
  88.  
  89. 1.  Introduction
  90. =================
  91.  
  92.      Print out this manual by typing:
  93.      copy graph.doc prn
  94.  
  95.      This collection of Fortran subroutines will make it simple for 
  96.      you to plot high quality scientific and engineering graphs on
  97.      dot matrix printers which have the ability to print graphics. 
  98.      These subroutines can easily be incorporated into any Fortran 
  99.      program, so that your own programs can automatically print 
  100.      high resolution graphs as part of the program output. Also 
  101.      included is a sample main program to illustrate the use of the 
  102.      subroutines. This sample program works as a stand-alone graph 
  103.      plotter for plotting graphs from a data file. So, as an 
  104.      alternative  to incorporating the graph plotting subroutines 
  105.      into your own programs, you could instead get your program to
  106.      simply write a suitable data file to disk for plotting out
  107.      later, using the sample main program supplied (GRAPH.for).
  108.  
  109.      Some of the features available are :
  110.  
  111.      * high or low resolution options,
  112.      * graph can be plotted vertically or horizontally on the page,
  113.      * linear or logarithmic axes, with labelling of axes,
  114.      * overlaying grid lines on the graph, in various line styles,
  115.      * drawing lines in different styles (solid, dotted etc.),
  116.      * plotting points, with a large range of symbols to choose from,
  117.      * joining points with straight lines or a cubic spline,
  118.      * plotting user-defined functions,
  119.      * passing a list of parameters to the user-defined functions,
  120.      * placing text of different sizes and orientations on the graph,
  121.      * clearing an area of the graph, with optional border,
  122.      * automatic generation of legend tables to describe each curve,
  123.      * variable size and spacing of axis labels.
  124.  
  125.      Read through this manual and print out all the demonstration
  126.      graphs before using the programs for your own applications.
  127.      That way you will be more familiar with the capabilities of
  128.      the programs.
  129.  
  130.                                                                Page 4
  131.  
  132. 2.  Description of disk contents
  133. =================================
  134.  
  135.      Your disk should contain the following files :-
  136.  
  137.      README  .exe    Program for browsing through documents & manuals.
  138.  
  139.      README  .doc    Text document with a description of the overall
  140.                      use of the programs, plus a brief description of
  141.                      each file.
  142.  
  143.      REGIST  .doc    Registration form, and other information.
  144.  
  145.      GRF     .bat    Sample batch file for executing GRAPH with a
  146.                      data file.
  147.  
  148.      GRAPH   .doc    User's manual.
  149.  
  150.      GRAPH   .for    Sample main program for plotting graphs on dot
  151.                      matrix printers, from data files.
  152.  
  153.      GRAPHLIB.for    Subroutine library of graph plotting
  154.                      procedures for plotting on dot matrix printers.
  155.  
  156.      GRAPHFNS.for    Function segment containing user-defined
  157.                      functions.
  158.  
  159.      GRAPH   .nnn    Sample data files to use with GRF.bat
  160.                      (nnn is a number 001 to 999) :-
  161.  
  162.           GRAPH.001  General graph demo (vertical and Hi-res).
  163.           GRAPH.002  Same as .001, but horizontal and Lo-res format.
  164.           GRAPH.003  Graph of several standard functions.
  165.           GRAPH.004  Demo of text, graph symbols and line styles.
  166.           GRAPH.005  Variation of GRAPH.001, showing axis formatting.
  167.                                                                Page 5
  168.  
  169.  
  170. 3.  Some quick demonstrations
  171. ==============================
  172.  
  173.      For a quick and easy demonstration of some of the graph
  174.      plotting capabilities of the programs follow the steps listed
  175.      below. You need a Fortran 77 compiler to compile the program.
  176.      The Fortran programs should be usable on any computer which
  177.      has a Fortran 77 compiler and a suitable dot matrix printer,
  178.      though this section assumes you are using an MS-Dos or PC-Dos
  179.      operating system (for the GRF.bat batch file).
  180.  
  181.      The graphs should print correctly on printers such as the IBM
  182.      Proprinter, and most Epson and Star dot matrix printers. If
  183.      you have a different printer, try this procedure first. If the
  184.      graph does not print correctly then you will have to modify
  185.      subroutine PRTGRF in disk file GRAPHLIB.for. If you have less
  186.      than 310 kBytes of available RAM, you may have to change the
  187.      DIMENSION statement in the sample main program GRAPH.for; and
  188.      you may not have enough memory to print some the demonstration
  189.      graphs.
  190.  
  191.      To print out GRAPH.001:
  192.      -----------------------
  193.  
  194.      a)   Insert the disk containing the GRAPH programs into the 
  195.           default disk drive, or if you have a hard disk then copy 
  196.           them to the hard disk.
  197.  
  198.      b)   Compile the program GRAPH.for using your Fortran 77
  199.           compiler. An executable file called GRAPH.exe should be 
  200.           created by the compiler.
  201.  
  202.      c)   Make sure the dot matrix printer is connected and
  203.           switched on.
  204.  
  205.      d)   At the Dos command line type :
  206.           grf 001
  207.  
  208.      e)   Wait a minute or two while the graph is 'plotted' in the
  209.           computer's memory, after which it will be directed to the 
  210.           printer and printed in high resolution.
  211.  
  212.      The above procedure uses the supplied batch file GRF.bat to
  213.      print out the graph defined in the demonstration file
  214.      GRAPH.001. Several other graph demonstration files are
  215.      supplied on disk; these are named GRAPH.nnn, where nnn is a
  216.      number. Just type   grf nnn   to print graph GRAPH.nnn
  217.      (assuming that you have already compiled the sample main
  218.      program GRAPH.for).
  219.                                                                Page 6
  220.  
  221. 4.  Using GRAPH to plot graphs from a data file
  222. ================================================
  223.  
  224.      The simplest way to plot graphs on a dot matrix printer is to
  225.      create a data file, and use the GRF.bat batch file to execute
  226.      it. Remember to compile the GRAPH.for program before you try
  227.      to execute it, using a Fortran 77 compiler (as described in
  228.      Section 3).
  229.  
  230.      The data file can be created using a word processor in non-
  231.      document mode, or it can be written by one of your own
  232.      programs as a simple ASCII data file. If you know how to
  233.      program in Fortran it should be a simple matter to tailor
  234.      GRAPH.for to your own requirements if necessary.
  235.  
  236.      A graph data file is created for input to the program. The
  237.      program then 'plots' the graph in memory, as a matrix of
  238.      points, before directing it to the printer. The maximum size
  239.      graph which can be plotted from the program GRAPH.for is 20 x
  240.      25 cm, but this can easily be changed by changing the
  241.      DIMENSION statement in GRAPH.for. The program is rather memory
  242.      intensive - for example the 20 x 25 cm size requires at least
  243.      310 kBytes of RAM for Hi-res plotting (though only about 80
  244.      kBytes for Lo-res).
  245.  
  246.  
  247.      a)  Plotting the demo graphs supplied
  248.      --------------------------------------
  249.      To get started, try plotting some or all of the demonstration
  250.      graphs supplied with the programs after you have compiled the
  251.      program GRAPH.for with your Fortran 77 compiler. The demo
  252.      graphs are named GRAPH.nnn, where the nnn refers to a number
  253.      from 000 to 999. For example, to plot the graph described by
  254.      file GRAPH.001, type :
  255.  
  256.      grf 001
  257.  
  258.      Make sure the printer is switched on. The graph will be
  259.      'plotted' in memory first, which could take a minute or two,
  260.      before being directed to the printer. Repeat this for all the
  261.      graph demos, so that you will have an idea of the capabilities
  262.      of the subroutines.
  263.  
  264.      b)  Plotting your own graphs
  265.      -----------------------------
  266.      To plot you own graphs from program GRAPH you will need to
  267.      create data files similar to the demo files described above.
  268.      Have a look at some of the demo files, and you will see that
  269.      they are simply lists of numbers and text. These provide the
  270.      program with information on the size and style of the graph,
  271.      and the data to be plotted. The program GRAPH.for reads the
  272.      data file, and passes the appropriate parameters to the
  273.      subroutines which do the plotting. It has been written very
  274.      simply, to make it easy for you to re-write to your own
  275.      requirements if you need to. As a result, the data
  276.      file is expected to be in a rigid format, so if you are going
  277.      to use the original GRAPH.for program, your data file must
  278.      conform to the specifications given in (c) below.
  279.                                                                Page 7
  280.  
  281.      c)  Data file specifications for GRAPH.for :
  282.      --------------------------------------------
  283.      The data file to be read by the supplied sample main program
  284.      GRAPH.for must conform to the specifications listed below. A
  285.      detailed discussion of the demonstration data file GRAPH.001
  286.      is given in Appendix D. You can always re-write the main
  287.      program to put the data entry into a more convenient form for
  288.      your own applications. If you plan to use GRAPH.for for
  289.      plotting your own graphs then the data file you write must
  290.      conform to the following specifications:-
  291.  
  292.      1. Maximum 80 characters per line (standard Fortran input).
  293.      2. Numbers must generally be within fields of width 10 columns,
  294.         (5 column width for the first line of each data set).
  295.      3. Text may occupy rest of line to column 80.
  296.      4. If more than 8 numbers are required, use as many lines as
  297.         necessary. (eg. for entering more than 8 function parameters)
  298.  
  299. The names used are defined in Appendix A.
  300. Once you have read through them, most of them will be self-evident.
  301.  
  302. line 1 : glabel.     {Graph title}
  303.  
  304. line 2 : xlabel.     {x-axis title}
  305.  
  306. line 3 : ylabel.     {y-axis title}
  307.  
  308. line 4 : xl, yl, bwleft, bwrght, bwtop, bwbott.
  309.          {x & y-axis lengths and border widths}
  310.  
  311. line 5 : xmin, xmax, ymin, ymax.
  312.          {min & max values for plotting}
  313.  
  314. line 6 : ndivx, nsdivx, igrdx1, igrdx2, ndpx
  315.          {x-axis specs, divisions, grid lines, dec. places}
  316.  
  317. line 7 : ndivy, nsdivy, igrdy1, igrdy2, ndpy
  318.          {y-axis specs, divisions, grid lines, dec. places}
  319.  
  320. line 8 : iszval, iszxyl, ioriyv, iszttl, justtl
  321.          {size, orientation, justification of axis labels}
  322.  
  323. line 9 : valpos, xlbpos, ylbpos, ttlpos
  324.          {for adjusting placing of axis labels}
  325.  
  326. line 10 : igrprt, ivh, lohi, ioff
  327.           {print control for axes, format, resolution, offset}
  328.  
  329. line 11 : lgdpos, lgdlns, lgdchs, lgdsiz, lgdtyp
  330.           {legend table specs - position, lines, chars, text size, line}
  331.  
  332. Next comes the data for each set of data to be plotted.
  333. Each set of data can be one of...
  334.    a) Clearing a rectangular area of the graph, with optional border;
  335.    b) Write text at (x,y), with any size, orientation and justification;
  336.    c) Plot one of the continuous functions from subroutine GRAPHFNS
  337.    d) Plot a set of points, with optional straight lines or smooth curve
  338.       through the points.
  339.                                                                Page 8
  340.  
  341. For each set of data add the following lines...
  342.  
  343. line a : npts, ltyp, mark, msize, inout, legend.
  344.          {Number of points or type of plot, line type etc.}
  345.  
  346. line b : if npts>0     [Plot a series of npts data points]
  347.                    enter --- x, y     (1 line for each data pair)
  348.  
  349.          if npts=0     [Plot user-defined function number ifn]
  350.                    enter --- 1st line:  ifn, nparms, x1, x2
  351.                              2nd line:  p(i) for i=1 to nparms
  352.  
  353.          if npts=-1    [ Write a text string starting at (x,y)    ]
  354.                        [ (x,y) defines the centre of upper case X ]
  355.                    enter --- 1st line:  iori, itxsiz, justif, x, y
  356.                              2nd line:  strng
  357.  
  358.          if npts=-2    [ Clear a rectangular area of the graph  ]
  359.                        [ (x1,y1)=top left, (x2,y2)=bottom right ]
  360.                    enter --- 1st line:  x1, y1, x2, y2
  361.  
  362.          if npts=-99   [ End of data. Plot graph and terminate program ]
  363.  
  364.                                                                Page 9
  365.  
  366. 5.  Using the GRAPHLIB subroutines to plot graphs from your own programs
  367. ========================================================================
  368.  
  369.      It is a simple matter to get your own Fortran programs to
  370.      print graphs on dot matrix printers which have plotting
  371.      facilities. Read through sections 3 and 4 first to get an idea
  372.      of how the sample main program works. For you own program you
  373.      simply need to assign values to the variables described in the
  374.      above section (ie. the variables which are read from a data
  375.      file in the sample main program supplied). You also need to
  376.      DIMENSION the arrays IGRAPH and P in your main program
  377.      according to the maximum size graph you will be printing out,
  378.      and the maximum number of parameters to be passed to the user-
  379.      defined functions. Details are in the source code file
  380.      GRAPH.for. If you want to add your own user-defined functions,
  381.      you can do this by modifying the file GRAPHFNS.for. Then your
  382.      program calls the following subroutines :
  383.  
  384.       PREP(... to prepare axis sizes, scaling factors, and other
  385.                details. This MUST be called before any of the plotting
  386.                routines.
  387.  
  388.       AXES(... to define and plot axes for the graph.
  389.  
  390.       PLOTD(...for each set of data to be plotted. A 'set of data'
  391.                is defined as a string of text, a user-defined
  392.                function plotted between specified values on the x-
  393.                axis, a set of data points (which may be connected
  394.                by a line or smooth curve), or clearing an area of
  395.                the graph.
  396.  
  397.      If your program is to plot more than one graph, remember to
  398.      clear the previous graph before starting to plot the next one,
  399.      using :-
  400.  
  401.       CLRGRF(...
  402.  
  403.      Finally, you will also need to include the subroutine library
  404.      and function segment with the statements:
  405.  
  406.       INCLUDE 'GRAPHLIB.for'
  407.       INCLUDE 'GRAPHFNS.for'
  408.  
  409.  
  410.      For more advanced programming or plotting, you may want to
  411.      call some of the other subroutines in the library, or you may
  412.      want to modify them for your personal use. The subroutines
  413.      should have sufficient comment lines to enable you to do this
  414.      if you are reasonably familiar with programming in Fortran.
  415.                                                                Page 10
  416.  
  417. 6.  Limitations
  418. ================
  419.  
  420. a)  Graph size & Memory
  421. ------------------------
  422.  
  423.      The size of graph which you can plot is limited only by the
  424.      paper size on your printer, and the amount of memory (RAM)
  425.      available in your computer. The maximum size is set by the
  426.      DIMENSION statement for array IGRAPH in the main program. For
  427.      a graph of 20 x 25 cm (8" x 10"), about 310 kBytes of RAM is
  428.      required for Hi-res, and about 80 kB for Lo-res.
  429.  
  430.      If the x- or y-axis lengths (plus the allocated border widths)
  431.      specified are too long for the DIMENSION'ed size of IGRAPH, the
  432.      program will terminate with an error.
  433.  
  434.  
  435. b)  Function parameters
  436. ------------------------
  437.  
  438.      The maximum number of parameters which can be passed to the
  439.      user-defined functions in FUNCTION FGRAPH is specified by the
  440.      DIMENSION of array P() in the main program.
  441.  
  442.                                                                Page 11
  443.  
  444. Appendix A.  Definition of Fortran names used
  445. ==============================================
  446.  
  447. Below is a list of the main variable names used in the program GRAPH
  448. and subroutine library GRAPHLIB.
  449.  
  450.  
  451. BWBOTT = Border width below axes, cm.
  452.  
  453. BWLEFT = Border width to left of axes, cm.
  454.  
  455. BWRGHT = Border width to right of axes, cm.
  456.  
  457. BWTOP  = Border width above axes, cm.
  458.  
  459. GLABEL = Graph title.
  460.  
  461. IFN    = Function number (pre-compiled in FUNCT) to plot if NPTS=0.
  462.  
  463. IGRDx1,x2,y1,y2 = 1 to n for grid lines of line type LTYP  on major/minor
  464.                   divisions of x and y-axes. 0 for no grid lines.
  465.  
  466. IGRPRT = 1 to print the axes, 0 to suppress printing of axes when calling
  467.          subroutine AXES. You need to call AXES to set XMIN etc, but may
  468.          want to suppress the actual plotting of the axes.
  469.  
  470. INOUT  = 0 to restrict plotting to within axes,
  471.          1 to allow plotting into border areas.
  472.  
  473. IOFF   = Offset. This number of blank spaces will be printed from the left
  474.          margin before the graph itself is printed.
  475.  
  476.  
  477. IPT    =  Symbol to be plotted to mark a data point
  478.             1 : point
  479.             2 : open octagon
  480.             3 : filled  "
  481.             4 : open square
  482.             5 : filled  "
  483.             6 : open triangle
  484.             7 : filled  "
  485.             8 : cross
  486.             9 : plus
  487.            10 : star
  488.            11 : open diamond
  489.            12 : filled  "
  490.        13-31  : Might be used later. Blank for now.
  491.        32-126 : plot the corresponding ASCII character (Orientation = 1)
  492.  
  493. ISZTTL = The text size for printing the graph title
  494.  
  495. ISZVAL = The text size for printing axis values
  496.  
  497. ISZXYL = The text size for printing x and y-axis labels
  498.  
  499. ITXSIZ = Size of text to be plotted (1 to n).  2 = "normal".
  500.  
  501.                                                                Page 12
  502.  
  503. IVH    = 1 for vertical (portrait) printout, 2 for horizontal (landscape).
  504.  
  505. JUSTIF = Text justification. -1=left, 0=centre, 1=right.
  506.  
  507. JUSTTL = Justification of graph title. (-1=left, 0=centre, 1=right)
  508.  
  509. LEGEND = Text to describe each data set. Blank to suppress.
  510.  
  511. LGDCHS = Max number of characters for an entry into the legend table
  512.  
  513. LGDLNS = Number of lines of text to be allocated for legend table
  514.  
  515. LGDPOS = Position of legend table. 1 = top left, to 4 = top right.
  516.                                    5 = bott. " , to 8 = bott. "  .
  517.  
  518. LGDSIZ = Text size for legend table entries (for sizing the legend table)
  519.  
  520. LGDTYP = Line type to draw around legend table. (0=none, 1=solid etc)
  521.  
  522. LOHI   = 1 for Low-res (quick) plot, 2 for Hi-Res.
  523.  
  524. LTYP   = Line type : 0 = none
  525.                      1 =  continuous line
  526.                      2 =  .................
  527.                      3 =  . . . . . . . . .
  528.                      4 =  - - - - - - - - -
  529.                      5 =  -- . -- . -- . --
  530.  
  531. MARK   = Symbol to be plotted at each point (see also IPT)
  532.          (1 = dot, 2..8 = symbol, 32..126 = ASCII character)
  533.  
  534. MAXX   = Number of dots across x-axis. (calculated by PREP)
  535.  
  536. MAXY   = Number of dots along y-axis.  (calculated by PREP)
  537.  
  538. MMAXX  = the number of columns of dots across the page,
  539.  
  540. MMAXX,MMAXY are for passing the dimension of IGRAPH to subroutines.
  541.  
  542. MMAXY  = the (number of rows of dots)/14
  543.  
  544. MSIZE  = Size of symbol to be plotted
  545.  
  546. NDIVX  = No of major divisions along x-axis (0 for log. scales)
  547.  
  548. NDIVY  = No of major divisions along y-axis (0 for log. scales)
  549.  
  550. NDPX   = No of decimal places for axis values on x-axis. Ignored for log axes.
  551.  
  552. NDPY   = No of decimal places for axis values on y-axis. Ignored for log axes.
  553.  
  554. NPARMS = Number of parameters to be passed to function IFN (max 100).
  555.  
  556. NPTS   = No of data points for current data set, or if <=0 then..
  557.            0 to plot a function curve,
  558.           -1 for plotting a text string,
  559.           -2 to clear a rectangular area of the graph, with optional border.
  560.  
  561.                                                                Page 13
  562.  
  563. NSDIVX = No of secondary divisions between each major division on x-axis.
  564.          Use 1 or 9 for log. scales.
  565.  
  566. NSDIVY = No of secondary divisions between each major division on y-axis.
  567.          Use 1 or 9 for log. scales.
  568.  
  569. P      = The array of parameters to be passed to function IFN.
  570.  
  571. STRNG  = A string of text to be printed on the graph
  572.  
  573. TITLE  = Graph title (also GLABEL).
  574.  
  575. TTLPOS = To adjust the distance between axis and centre of graph title.
  576.          (>0 = Above top axis, <0 = below bottom axis
  577.          magnitude: 1=default, <1=closer to axis, >1=further from axis)
  578. VALPOS = To adjust the distance between axis and centre of axis value.
  579.          (1=default, <1=closer to axis, >1=further from axis)
  580.  
  581. X1,X2  = Start and end values of x for plotting function IFN.
  582.  
  583. XL     = Length of x-axis, cm.
  584.  
  585. XLABEL = x-axis label.
  586.  
  587. XLBPOS = To adjust the distance between x-axis and x-axis label.
  588.          1=default, <1=closer to axis, >1=further from axis.
  589.  
  590. XMAX   = Maximum value on x-axis
  591.  
  592. XMAX   = x-value at extreme right of graph page
  593.  
  594. XMIN   = Minimum value on x-axis
  595.  
  596. XMINA  = x-value at extreme left of graph page
  597.  
  598. YL     = Length of y-axis, cm.
  599.  
  600. YLABEL = y-axis label.
  601.  
  602. YLBPOS = As for XLBPOS, but for y-axis. eg. If IORIYV=1 and the y-axis
  603.          values are several characters long, set YLBPOS>1 to shift the
  604.          label further away from the axis.
  605.  
  606. YMAX   = Maximum value on y-axis
  607.  
  608. YMAXA  = y-value at top of graph page
  609.  
  610. YMIN   = Minimum value on y-axis
  611.  
  612. YMINA  = y-value at bottom of graph page
  613.  
  614.  
  615.                                                                Page 14
  616.  
  617. Appendix B.  Symbols and line types
  618. ====================================
  619.  
  620.  
  621.      When a set of data points is to be plotted, a symbol from 
  622.      Table B1 is plotted at the position of each point. When points 
  623.      are to be joined with lines, the type of line specified by 
  624.      ltyp is shown below in Table B2. The symbols and lines can
  625.      best be seen by printing out the demonstration graph GRAPH.004 
  626.      (see sections 3 and 4 for how to do this).
  627.  
  628.  
  629.        Table B1 : Symbols           Table B2 : Line Types (approx)
  630.       --------------------         --------------------------------
  631.         mark:-                       ltyp:-
  632.         1 = point                    1 =  solid (continuous) line
  633.         2 = open octagon             2 =  .................
  634.         3 = filled  "                3 =  . . . . . . . . .
  635.         4 = open square              4 =  - - - - - - - - -
  636.         5 = filled  "                5 =  -- . -- . -- . --
  637.         6 = open triangle
  638.         7 = filled  "
  639.         8 = cross
  640.         9 = plus
  641.        10 = star
  642.        11 = open diamond
  643.        12 = filled  "
  644.        32 to 126 = point plus ASCII character, defined below:
  645.  
  646.  
  647.  
  648.  
  649.         ASCII Characters
  650.        ==================
  651.  
  652.                     50  2       70  F       90  Z       110  n
  653.                     51  3       71  G       91  [       111  o
  654.         32          52  4       72  H       92  \       112  p
  655.         33  !       53  5       73  I       93  ]       113  q
  656.         34  "       54  6       74  J       94  ^       114  r
  657.         35  #       55  7       75  K       95  _       115  s
  658.         36  $       56  8       76  L       96  `       116  t
  659.         37  %       57  9       77  M       97  a       117  u
  660.         38  &       58  :       78  N       98  b       118  v
  661.         39  '       59  ;       79  O       99  c       119  w
  662.         40  (       60  <       80  P      100  d       120  x
  663.         41  )       61  =       81  Q      101  e       121  y
  664.         42  *       62  >       82  R      102  f       122  z
  665.         43  +       63  ?       83  S      103  g       123  {
  666.         44  ,       64  @       84  T      104  h       124  |
  667.         45  -       65  A       85  U      105  i       125  }
  668.         46  .       66  B       86  V      106  j       126  ~
  669.         47  /       67  C       87  W      107  k
  670.         48  0       68  D       88  X      108  l
  671.         49  1       69  E       89  Y      109  m
  672.                                                                Page 15
  673.  
  674. Appendix C.  Sample list of standard user-defined functions
  675. ============================================================
  676.  
  677.      You can plot any continuous function f(x) by calling one of
  678.      the functions defined in FUNCTION FGRAPH(..., supplied on disk
  679.      as file GRAPHFNS.for.  A number of standard functions have
  680.      been supplied in this file to get you started. If you need any
  681.      others, just program them in the same manner, and re-compile
  682.      your program. The maximum number of parameters which can be
  683.      passed is specified in the DIMENSION of the array P() in the
  684.      main program segment (set at 20 in the sample main program
  685.      GRAPH.for).
  686.  
  687.      The functions are called with a function number (to specify
  688.      which function you want to evaluate), a list of parameters,
  689.      and an x-value. It then returns the corresponding y-value. For
  690.      example, if you want to plot the parabola  f(x) = 1.2 + 2*x -
  691.      3.4*x^2,  you would specify :
  692.  
  693.        IFN  = 1      (function number 1 = polynomial)
  694.        P(1) = 2      (polynomial of order 2)
  695.        P(2) = 1.2    (1st coefficient of the polynomial)
  696.        P(3) = 2      (2nd     "      )
  697.        P(4) = 3.4    (3rd     "      )
  698.  
  699.      The file GRAPHFNS.for is printed out below for convenience.
  700.      The standard functions available are :-
  701.  
  702. 1. Polynomial of any order   f(x) = a0 + a1.x + a2.x^2 + ... + an.x^n
  703.  
  704. 2. Exponential               f(x) = a + b.exp(c.x)
  705.  
  706. 3. Power function            f(x) = a + b*x^c
  707.  
  708. 4. Logarithmic (natural)     f(x) = a + b.ln(c.x+d)
  709.  
  710. 5. Logarithmic (base 10)     f(x) = a + b.log(c.x+d)
  711.  
  712. 6. Inverse function          f(x) = a + b/(c+x)
  713.  
  714. 7. Circle (top or bottom half)
  715.  
  716. 8. Ellipse (top or bottom half)
  717.                                                                Page 16
  718.  
  719. This is a listing of the source code for the sample user-defined
  720. functions supplied with the programs :-
  721.  
  722.  
  723.  
  724.       FUNCTION FGRAPH(IFN,P,X)
  725. *
  726. * The list of functions for plotting on IGRAPH.
  727. * This list can be added to as required.
  728. *
  729. * FNUM = Function number
  730. * P    = Array of parameters to be passed to the selected function
  731. * X    = X-value at which the function is to be evaluated
  732. *
  733.       DIMENSION P(*)
  734. * To add more functions, add labels to the following statement:
  735.       GOTO (1,2,3,4,5,6,7,8) IFN
  736. *
  737. * Function 1. Polynomial (to n-th order). n+2 parameters.
  738. *             P(1)=n,  P(2) to P(n+2) = coeffecients a0, a1, a2, ... an.
  739. *                      [ f(x) = a0 + a1.x + a2.x^2 + ... + an.x^n ]
  740. *
  741.    1  N = INT(P(1)+0.5)
  742.       POLY = P(N+2)
  743.       DO 100 I=N+1, 2, -1
  744.         POLY = X*POLY + P(I)
  745.  100  CONTINUE
  746.       FGRAPH = POLY
  747.       RETURN
  748. *
  749. *  Function 2. Exponential, 3 parameters.
  750. *              f(x) = a + b.exp(c.x)
  751. *
  752.    2  FGRAPH = P(1) + P(2)*EXP(P(3)*X)
  753.       RETURN
  754. *
  755. *  Function 3. Power function, 3 parameters.
  756. *              f(x) = a + b.x^c
  757. *
  758.    3  FGRAPH = P(1) + P(2)*X**P(3)
  759.       RETURN
  760. *
  761. *  Function 4. Logarithmic, 4 parameters.
  762. *              f(x) = a + b.ln(c.x+d)
  763. *
  764.    4  FGRAPH = P(1) + P(2)*ALOG(P(3)*X + P(4))
  765.       RETURN
  766. *
  767. *  Function 5. Base 10 Logarithmic, 4 parameters.
  768. *              f(x) = a + b.log(c.x+d)
  769. *
  770.    5  FGRAPH = P(1) + P(2)*ALOG10(P(3)*X + P(4))
  771.       RETURN
  772. *
  773. *  Function 6. Inverse function, 3 parameters.
  774. *              f(x) = a + b/(c+x)
  775.    6  FGRAPH = P(1) + P(2)/(P(3)+X)
  776.       RETURN
  777.                                                                Page 17
  778.  
  779. *
  780. *  Function 7. Circle.    4 Parameters.
  781. *              P(1) = 1 for top half of circle, -1 for bottom half.
  782. *              P(2) = radius.
  783. *              P(3) = x coordinate of centre of circle.
  784. *              P(4) = y coordinate of centre of circle.
  785. *
  786.    7  XXX = P(2)*P(2) - (X-P(3))**2.
  787.       IF(XXX.LT.0) XXX = 0.
  788.       FGRAPH = P(1)*SQRT(XXX) + P(4)
  789.       RETURN
  790. *
  791. *  Function 8. Ellipse.    5 Parameters.
  792. *              P(1) = 1 for top half of ellipse, -1 for bottom half.
  793. *              P(2) = max radius in x direction.
  794. *              P(3) = max radius in y direction.
  795. *              P(4) = x coordinate of centre of ellipse.
  796. *              P(5) = y coordinate of centre of ellipse.
  797. *
  798.    8  XXX = 1.- ((X-P(4))/P(2))**2.
  799.       IF(XXX.LT.0) XXX = 0.
  800.       FGRAPH = P(1)*P(3)*SQRT(XXX) + P(5)
  801.       RETURN
  802.       END
  803.  
  804. *---------------------------------------------------------------------------
  805.                                                                Page 18
  806.  
  807. Appendix D.  A sample data file for use with GRAPH
  808. ===================================================
  809.  
  810. Several demonstration graph files are supplied with the programs.
  811. The first one, GRAPH.001, is discussed in detail in this section
  812. to make it easier to understand how to set up your own graph data
  813. files for use with the sample main program GRAPH.for. The actual
  814. data file is :-
  815.  
  816.  
  817. Demonstration Graph 1
  818. x-axis, log scale
  819. y-axis, linear scale
  820. 16.       12.       2.        1.        1.        2.
  821. 1         100       0.        10.
  822. 0         9         2         2         0
  823. 10        4         2         2         0
  824. 2         3         0         3         0
  825. 1.        1.        1.        1.
  826. 1         1         2         5
  827. 1         4         27        2         1
  828. 6    -1   2    2    0    Data 1, fitted with spline
  829. 1.33      2.1
  830. 1.67      4.4
  831. 2.67      6.3
  832. 10.       7.4
  833. 30.       8.
  834. 60.       9.2
  835. 6    1    3    2    0    Data 2, with straight lines
  836. 3.        .3
  837. 8.        1.
  838. 15.       .5
  839. 25.       1.5
  840. 50.       1.5
  841. 90.       4.
  842. 6    0    6    3    0    Data 3, points only
  843. 2.        1.5
  844. 6.        2.
  845. 10.       2.6
  846. 20.       3.7
  847. 45.       5.5
  848. 80.       9.3
  849. 0    4    1    1    0    y = x/10 + 1.5
  850. 1         3         1.5       90.       {function 1. Polynomial}
  851. 1         1.5       0.1
  852. -2   1    0    0    1
  853. 25.       4.7       53.       5.3
  854. -1   1    0    0    1
  855. 1         2         -1        28.       5.
  856. Any text
  857. -99
  858.  
  859.                                                                Page 19
  860.  
  861. The data file is described below on a line-by-line basis...
  862. ------------------------------------------------------------
  863.  
  864. Demonstration Graph 1
  865. ---> line 1 : Graph title
  866.  
  867. x-axis, log scale
  868. ---> line 2 : x-axis label
  869.  
  870. y-axis, linear scale
  871. ---> line 3 : y-axis label
  872.  
  873. 16.       12.       2.        1.        1.        2.
  874. ---> line 4 : xl, yl, bwleft, bwrght, bwtop, bwbott.
  875.      x,y axis lengths = 16 & 12 cm, with 2 cm. border left and below,
  876.      and 1 cm. border right and above.
  877.  
  878. 1         100       0.        10.
  879. ---> line 5 : xmin, xmax, ymin, ymax.
  880.      x-axis runs from 1 to 100, y-axis from 0 to 10.
  881.  
  882. 0         9         2         2         0
  883. ---> line 6 : ndivx, nsdivx, igrdx1, igrdx2, ndpx
  884.      x-axis has log scale, 9 secondary subdivisions between decades,
  885.      grid on major and minor axes in linestyle 2, 0 decimal places (ignored
  886.      for log axes).
  887.  
  888. 10        4         2         2         0
  889. ---> line 7 : ndivy, nsdivy, igrdy1, igrdy2, ndpy
  890.      y-axis has linear scale with 10 major divisions, 4 secondary subdivisions
  891.      between major divisions, grid on major and minor axes in linestyle 2,
  892.      0 decimal places for values written along the axis.
  893.  
  894. 2         3         0         3         0
  895. ---> line 8 : iszval, iszxyl, ioriyv, iszttl, justtl
  896.      text size 2 for axis values, text size 3 for axis titles (labels),
  897.      orientation 0 for y-axis values (ie. values are printed parallel to the
  898.      y-axis. Use 1 for parallel to x-axis), text size 3 for graph title,
  899.      0=centre justify graph title above top of graph.
  900.  
  901. 1.        1.        1.        1.
  902. ---> line 9 : valpos, xlbpos, ylbpos, ttlpos
  903.      To adjust placing of text along axes: distance of axis values from axes,
  904.      distance of x and y titles from axes, distance of graph title above top
  905.      or below bottom of graph. Use 1. for default distance, <1 to shift closer
  906.      to axis, >1 to shift away from axes.
  907.  
  908. 1         1         2         5
  909. ---> line 10 : igrprt, ivh, lohi, ioff
  910.      1=print axes (use 0 to define axis values but prevent actually printing
  911.      the axes), 1=vertical format (use 2 for horizontal), 2=Hi resolution,
  912.      print 5 spaces to offset graph from left of page.
  913.  
  914. 1         4         27        2         1
  915. ---> line 11 : lgdpos, lgdlns, lgdchs, lgdsiz, lgdtyp
  916.      Put the legend table at position 1 (top left), allocate 4 lines of text
  917.      for the legend table, with up to 27 characters per line, legend text size
  918.      is to be 2, draw a box around legend table in line style 1 (solid line).
  919.                                                                Page 20
  920.  
  921. ----------Start first data set...
  922.  
  923. 6    -1   2    2    0    Data 1, fitted with spline
  924. ---> npts=6, ltyp=-1, mark=2, msize=2, inout=0, legend='Data 1....
  925. ---> 6 points for data set 1, join points with a cubic spline (smooth curve),
  926.     place symbol 2 at each point (open octagon), size 2 for the symbol,
  927.     0 to restrict plotting to inside axes (use 1 to allow plotting outside
  928.     the axes, in the border areas), description for the legend table starting
  929.     in column 26.
  930.  
  931. 1.33      2.1
  932. 1.67      4.4
  933. 2.67      6.3
  934. 10.       7.4
  935. 30.       8.
  936. 60.       9.2
  937. ---> The 6 data points for set 1 (x,y)
  938.  
  939. ----------Start another data set...
  940.  
  941. 6    1    3    2    0    Data 2, fitted with straight lines
  942. ---> 6 points for data set 2, 1=join points with straight lines of line style
  943.     1 (solid), place symbol 3 at each point (filled octagon), size 2 for
  944.     the symbol, restrict to inside axes, description for the legend table.
  945.  
  946. 3.        .3
  947. 8.        1.
  948. 15.       .5
  949. 25.       1.5
  950. 50.       1.5
  951. 90.       4.
  952. ---> the 6 data points for set 2 (x,y)
  953.  
  954. ----------Start another data set...
  955.  
  956. 6    0    6    3    0    Data 3
  957. ---> 6 points for data set 3, plot points only (do not join), place symbol 6
  958.     at each point (open triangle), size 3 for the symbol, restrict to inside
  959.     axes, description for the legend table.
  960.  
  961. 2.        1.5
  962. 6.        2.
  963. 10.       2.6
  964. 20.       3.7
  965. 45.       5.5
  966. 80.       9.3
  967. ---> the 6 data points for set 3 (x,y)
  968.  
  969. ----------Start another data set...
  970.  
  971. 0    4    1    1    0     y = x/10 + 1.5
  972. ---> npts=0, ltyp=4, mark=1, msize=1, legend='y = x/10....
  973. ---> a user-defined function for set 4, line style 4 (dashed), ignored,
  974.     ignored, restrict to inside axes, description for the legend table.
  975.  
  976. 1         3         1.5       90.       {function 1. Polynomial}
  977. ---> ifn=1, nparms=3, x1=1.5, x2=90
  978. ---> user-defined function number 1 = polynomial, 3 parameters to be passed,
  979.     plot from x=1.5 to x=90.
  980.                                                                Page 21
  981.  
  982. 1         1.5       0.1
  983. ---> The 3 parameters (-->  y = 1 + 1.5*x + 0.1*x^2 )
  984.  
  985. ----------Start another data set...
  986.  
  987. -2   1    0    0    1
  988. ---> npts=-2 to clear a box, ltyp=1 to draw a solid line around the box,
  989.      mark & msize ignored, inout=1 to allow printing outside axes,
  990.      legend=blank (no legend entry).
  991.  
  992. 25.       4.7       53.       5.3
  993. ---> The coordinates of the box to be cleared: (25,4.7) and (53,5.3)
  994.  
  995. ----------Start another data set...
  996.  
  997. -1   1    0    0    1
  998. ---> npts=-1 to plot a text string, line style 1 (solid), mark & msize
  999.      ignored, inout=1 to allow printing outside axes, no legend entry.
  1000.  
  1001. 1         2         -1        28.       5.
  1002. ---> iori=1 for normal orientation for the text string (parallel to x-axis),
  1003.      itxsiz=2 for text size 2, justif=-1 for left justified, at (28,5).
  1004.  
  1005. Any text
  1006. ---> The text string to plot at the above conditions.
  1007.  
  1008. ----------Start another data set...
  1009.  
  1010. -99
  1011. ---> END OF DATA.
  1012.  
  1013.                                                                Page 22
  1014.  
  1015. Appendix E.  Changes from earlier versions
  1016. ===========================================
  1017.  
  1018. Version 2.0 :  Addition of clearing an area of the graph, with optional
  1019.                border around cleared area.
  1020.                Minor changes to data entry format for GRAPH.
  1021.  
  1022. Version 3.0 :  Simplified legend table box-drawing, to ensure grid lines
  1023.                are cleared from the legend table.
  1024.                Control over size and position of axis values and labels.
  1025.                Separate specification of grid lines for x and y-axes, and
  1026.                for major and minor sub-divisions along axes.
  1027.                Major changes to data entry format for GRAPH.
  1028.  
  1029.  
  1030.